tagUtils
- 🇬🇧 English
- 🇮🇹 Italian
Module Name: tagUtils
Author: Domenico Cerone Creation Date: 25/09/2025
Last Reviewer: Domenico Cerone
Purpose: Thread-safe tag creation utilities to prevent duplicate Tags documents in high-concurrency scenarios.
Core Functions​
findOrCreateTagThreadSafe(name, group, type, additionalFields, requestId)​
Thread-safe function to find or create tags with mutex synchronization.
Parameters:
name(string): Tag name (e.g., "BLACK", "Medium")group(string): Tag group (e.g., "Frame Color", "Size")type(string): Tag type (e.g., "frameColor", "size")additionalFields(object): Optional fields (e.g.,\{catalogRef: brandId\})requestId(string): Request ID for logging
Returns: Promise<string> - Document ID of the tag
cleanupExpiredTagLocks()​
Removes expired tag creation locks (older than 10 minutes).
How It Works​
Problem: Multiple products with same tag values processed in parallel could create duplicate Tags documents.
Solution: Exclusive lock system:
- Lock key:
TAG_CREATE_{group}_{type}_{name} - Exponential backoff: 50ms → 1000ms max
- Automatic cleanup after 10 minutes
Used By​
- createProductDocument.js - 11 tag creation functions
- createVariantDocument.js - Frame color and size tags
- populateVariantFromSku.js - Indirect usage via above functions
- populateVariantFromExcel.js - Indirect usage via above functions
Benefits​
- Granular Locking: Each tag has its own lock
- No Duplicates: Thread-safe creation prevents duplicates
- High Performance: Tested with 500+ concurrent products
Nome Modulo: tagUtils
Autore: Domenico Cerone Data di creazione: 25/09/2025
Last Reviewer: Domenico Cerone
Purpose: Utilità di creazione tag thread-safe per prevenire documenti Tags duplicati in scenari di alta concorrenza.
Funzioni Core​
findOrCreateTagThreadSafe(name, group, type, additionalFields, requestId)​
Funzione thread-safe per trovare o creare tag con sincronizzazione mutex.
Parametri:
name(string): Nome tag (es. "BLACK", "Medium")group(string): Gruppo tag (es. "Frame Color", "Size")type(string): Tipo tag (es. "frameColor", "size")additionalFields(object): Campi opzionali (es.\{catalogRef: brandId\})requestId(string): ID richiesta per logging
Restituisce: Promise<string> - ID documento del tag
cleanupExpiredTagLocks()​
Rimuove lock di creazione tag scaduti (più vecchi di 10 minuti).
Come Funziona​
Problema: Più prodotti con stessi valori tag processati in parallelo potrebbero creare documenti Tags duplicati.
Soluzione: Sistema lock esclusivo:
- Chiave lock:
TAG_CREATE_{group}_{type}_{name} - Backoff esponenziale: 50ms → 1000ms max
- Cleanup automatico dopo 10 minuti
Utilizzato Da​
- createProductDocument.js - 11 funzioni di creazione tag
- createVariantDocument.js - Tag colore frame e taglie
- populateVariantFromSku.js - Uso indiretto tramite funzioni sopra
- populateVariantFromExcel.js - Uso indiretto tramite funzioni sopra
Vantaggi​
- Locking Granulare: Ogni tag ha il suo lock
- Nessun Duplicato: Creazione thread-safe previene duplicati
- Alta Performance: Testato con 500+ prodotti concorrenti